www.gusucode.com > VC 3D弹道仿真程序源码文件-源码程序 > VC 3D弹道仿真程序源码文件-源码程序/code/EarthModel.cpp

    //Download by http://www.NewXing.com
#include "stdafx.h"
#include "EarthModel.h"
#include <math.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CEarth::CEarth()
{
	Re    = 6371000.0;       //地球平均半径(球形)
	afa_e = 1/298.257;       //地球扁率
	ae    = 6378140.0;       //地球赤道半径,长轴半径
	be    = ae*(1.0-afa_e);  //地球赤道半径,短轴半径
	we    =  0.00007292115;  //地球自转角速度/rad 

}

CEarth::~CEarth()
{

}

/* 计算发射点地理纬度与地心纬度之差 函数*/
double CEarth::Cal_mu0(double B0, double phi0)
{
	double mu0 ;

	mu0 = B0 - phi0 ;
	
	return mu0 ;
}

/* 由发射点地理纬度计算发射点地心纬度 函数*/
double CEarth::Cal_phi0(double B0)
{
	double k, phi0 ;

	k = (be/ae)*(be/ae) ;
	phi0 = atan( k * tan(B0) ) ;

	return phi0;

}

/* 由计算得到的弹道地心纬度求对应的地理纬度 函数*/
double CEarth::Cal_B( double phi) // phi 为弧度 求出的B也为弧度
{
	double k, B;

	k = (ae/be)*(ae/be) ;
	B = atan( k * tan(phi) ) ;

	return B ;
}
void CEarth::CalEarthParams( )
{
}

/* 计算发射点处的地球半径 函数*/
double CEarth::Cal_R0( double B0 ) 
{
	double R0, phi0 ;

	phi0 = Cal_phi0( B0 ) ;

	R0 = ae*be/sqrt(ae*ae*sin(phi0)*sin(phi0)+be*be*cos(phi0)*cos(phi0)) ;

	return R0 ;
}

/* 计算弹道上任一点对应的的地球半径 函数*/
double CEarth::Cal_R( double phi ) 
{
	double R ;

	R = ae*be/sqrt(ae*ae*sin(phi)*sin(phi)+be*be*cos(phi)*cos(phi)) ;

	return R ;
}

/*计算发射点处的地球半径,在发射坐标系下的投影 函数*/
void CEarth::Cal_R0_xyz( double B0, double A0, double& R0x, double& R0y, double& R0z ) //发射点处的地球半径,在发射坐标系下的投影
{
	double R0, phi0 ;

	R0 = Cal_R0( B0 ) ;
	phi0 = Cal_phi0( B0 ) ;

	R0x = -R0 * sin(B0-phi0) * cos(A0);  
	R0y =  R0 * cos(B0-phi0);
	R0z =  R0 * sin(B0-phi0) * sin(A0);		//该程序中这三个值为定值         

	return ;
}

/*计算发射点处的地球自转角速度,在发射坐标系下的投影 函数*/
void CEarth::Cal_we_xyz( double B0, double A0, double& we_x, double& we_y, double& we_z ) //发射点处的地球半径,在发射坐标系下的投影
{
	we_x  = we*cos(B0)*cos(A0);  
	we_y  = we*sin(B0) ;  	
	we_z  = -we*cos(B0)*sin(A0) ;			//该程序中这三个值为定值

	return ;
}